#ifndef __QUEUE_H_
#define __QUEUE_H_
#include"DoubleLinkList.h"

typedef struct LinkQueue
{
    DList queue;
    ElementType FrontData;
}LQueue;

//链表节点打印回调函数
typedef void (*PrintCall)(ElementType data);
//销毁链表节点data域回调函数
typedef void (*DataDestroy)(ElementType data);


//初始化
int LQueue_Init(LQueue* lq);
//初始化，返回指针
LQueue* LQueue_Creat();
//销毁队列
void LQueue_Destroy(LQueue* lq, DataDestroy dataDestroy);
//遍历
void LQueue_Travel(LQueue* lq, PrintCall printCall);
//入队
void LQueue_Push(LQueue* lq, ElementType element);
//出队
ElementType* LQueue_Pop(LQueue* lq);
//判空
int LQueue_IsEmpty(LQueue* lq);
//获取队首元素
ElementType LQueue_GetFront(LQueue* lq);
//获取队列有效元素个数
int LQueue_Size(LQueue* lq);


#endif